package com.dingwen.treasure.base.util;

import cn.hutool.core.convert.Convert;
import com.dingwen.treasure.base.constant.PageConstant;
import com.dingwen.treasure.base.pojo.bo.PageBo;
import com.github.pagehelper.PageHelper;

/**
 * 通用分页实现：参考自若依
 *
 * @author dingwen
 * @date 2023/2/19 17:04
 */
public class PageUtil extends PageHelper {

    /**
     * 设置请求分页数据
     */
    public static void startPage() {
        PageBo pageBo = buildPageBo();
        PageHelper.startPage(
                        pageBo.getPageNum(),
                        pageBo.getPageSize(),
                        pageBo.getIsAsc()
                )
                .setReasonable(pageBo.getReasonable());
    }

    /**
     * 清理分页的线程变量
     */
    public static void clearPage() {
        PageHelper.clearPage();
    }

    /**
     * 设置请求排序数据
     */
    public static void startOrderBy() {
        String orderByColumn = getOrderByColumn();
        if (StringUtil.isNotEmpty(orderByColumn)) {
            String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
            PageHelper.orderBy(orderBy);
        }
    }

    /**
     * 构建页面业务对象
     *
     * @return {@link PageBo}
     */
    private static PageBo buildPageBo() {
        return PageBo.builder()
                .pageNum(getPageSize())
                .pageSize(getPageNum())
                .orderByColumn(getOrderByColumn())
                .isAsc(ServletUtils.getParameter(PageConstant.IS_ASC))
                .reasonable(ServletUtils.getParameterToBool(PageConstant.REASONABLE))
                .build();
    }

    /**
     * 获取排序的字段名称
     *
     * @return {@link String}
     */
    public static String getOrderByColumn() {
        return ServletUtils.getParameter(PageConstant.ORDER_BY_COLUMN);
    }

    /**
     * 获取页面大小
     *
     * @return {@link Integer}
     */
    public static Integer getPageSize() {
        return Convert.toInt(ServletUtils.getParameter(PageConstant.PAGE_NUM), 1);
    }

    /**
     * 获取第页面
     *
     * @return {@link Integer}
     */
    public static Integer getPageNum() {
        return Convert.toInt(ServletUtils.getParameter(PageConstant.PAGE_SIZE), 10);
    }


}
